home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 3 / Cream of the Crop 3.iso / utility / mu17_ext.zip / HOMEDIR.MOD < prev    next >
Text File  |  1994-03-07  |  2KB  |  129 lines

  1. (*
  2.  
  3.     Frank J. Beckamnn  (26.10.1993)
  4.  
  5.     HomeDir - get the homedirectory of a user
  6.  
  7.  
  8.     Usage:  HomeDir USERID,UID/K/N
  9.  
  10.         Only USERID or UID may be specified.
  11.         If no argument is given HomeDir uses the UID of logged user.
  12.  
  13. *)
  14.  
  15. MODULE HomeDir;
  16.  
  17. FROM SYSTEM IMPORT
  18.  ADDRESS, ADR;
  19.  
  20. FROM Arts IMPORT
  21.  returnVal;
  22. FROM String IMPORT
  23.  Copy;
  24. FROM Terminal IMPORT
  25.  WriteString, WriteLn, Flush;
  26.  
  27. FROM DosD IMPORT
  28.  RDArgsPtr;
  29. FROM DosL IMPORT
  30.  ReadArgs;
  31.  
  32. FROM MultiUserD IMPORT
  33.  UserInfoPtr, keyTypeUid, keyTypeUserID, useridsize;
  34. FROM MultiUserL IMPORT
  35.  AllocUserInfo, GetTaskOwner, GetUserInfo, FreeUserInfo;
  36.  
  37.  
  38. CONST
  39.  version=ADDRESS{ADR("$VER: HomeDir 39.4 (26.10.1993)\n")};
  40.  
  41.  
  42. TYPE
  43.  User=RECORD
  44.   CASE :INTEGER OF
  45.   | 1: user: LONGCARD;
  46.   | 2: uid: CARDINAL; gid: CARDINAL;
  47.   END;
  48.  END;
  49.  
  50.  MyArg=RECORD
  51.   CASE :INTEGER OF
  52.   | 1: num: LONGCARD;
  53.   | 2: str: ARRAY [0..useridsize-1] OF CHAR;
  54.   END;
  55.  END;
  56.  
  57.  
  58. PROCEDURE NoUser();
  59.  BEGIN
  60.   WriteString("Error: No user!");
  61.   WriteLn();
  62.   returnVal:=10;
  63.  END NoUser;
  64.  
  65.  
  66. PROCEDURE ExtractUid(u: LONGCARD): CARDINAL;
  67.  VAR
  68.   user: User;
  69.  BEGIN
  70.   user.user:=u;
  71.   RETURN user.uid;
  72.  END ExtractUid;
  73.  
  74.  
  75. VAR
  76.  info: UserInfoPtr;
  77.  args: RDArgsPtr;
  78.  argarray: ARRAY [0..1] OF POINTER TO MyArg;
  79.  keyType: LONGINT;
  80.  error: BOOLEAN;
  81.  
  82.  
  83. BEGIN
  84.  argarray[0]:=NIL; argarray[1]:=NIL;
  85.  args:=ReadArgs(ADR("USERID,UID/K/N"),ADR(argarray),NIL);
  86.  IF args # NIL THEN
  87.   IF (argarray[0] = NIL) OR (argarray[1] = NIL) THEN
  88.    info:=AllocUserInfo();
  89.    IF info # NIL THEN
  90.     error:=FALSE;
  91.     IF (argarray[0] = NIL) AND (argarray[1] = NIL) THEN
  92.      keyType:=keyTypeUid;
  93.      info^.uid:=ExtractUid(GetTaskOwner(NIL));
  94.      IF info^.uid = 0 THEN error:=TRUE END;
  95.     ELSIF argarray[0] = NIL THEN
  96.      keyType:=keyTypeUid;
  97.      info^.uid:=CARDINAL(argarray[1]^.num);
  98.     ELSE
  99.      keyType:=keyTypeUserID;
  100.      Copy(info^.userID, argarray[0]^.str);
  101.     END;
  102.     IF NOT error THEN
  103.      IF GetUserInfo(info, keyType) THEN
  104.       WriteString(info^.homeDir); Flush(); (* Sometimes Flush() is needed ?! *)
  105.       WriteLn();
  106.      ELSE
  107.       NoUser();
  108.      END;
  109.     ELSE
  110.      NoUser();
  111.     END;
  112.     FreeUserInfo(info);
  113.    ELSE
  114.     WriteString("Error: No memory for UserInfo!");
  115.     WriteLn();
  116.     returnVal:=20;
  117.    END;
  118.   ELSE
  119.    WriteString("Error: Please only one argument!");
  120.    WriteLn();
  121.    returnVal:=10;
  122.   END;
  123.  ELSE
  124.   WriteString("Error in arguments");
  125.   WriteLn();
  126.   returnVal:=10;
  127.  END;
  128. END HomeDir.
  129.